package com.xj.algorithm.leetcode;

/**
 * Excel表列序号
 */
public class L171_Excel列名转化为数字 {

    /**
     * 给定一个Excel表格中的列名称，返回其相应的列序号。
     *
     * 例如，
     *
     *     A -> 1
     *     B -> 2
     *     C -> 3
     *     ...
     *     Z -> 26
     *     AA -> 27
     *     AB -> 28
     *     ...
     * 示例 1:
     *
     * 输入: "A"
     * 输出: 1
     * 示例 2:
     *
     * 输入: "AB"
     * 输出: 28
     * 示例 3:
     *
     * 输入: "ZY"
     * 输出: 701
     */

    public static void main(String[] args) {
        System.out.println(titleToNumberGood("A"));
        System.out.println(titleToNumberGood("AB"));
        System.out.println(titleToNumberGood("ZY"));
    }

    //自己的解法：倒序求和
    public static int titleToNumber(String s) {
        int length=s.length();
        int scale=1;

        int result=0;
        for(int i=length-1;i>=0;i--){
            int value=(s.charAt(i)-'A'+1)*scale;
            result+=value;
            scale*=26;
        }
        return result;
    }

    //精彩解法：正序求和
    public static int titleToNumberGood(String s) {
        int ans = 0;
        for(int i=0;i<s.length();i++) {
            int num = s.charAt(i) - 'A' + 1;
            ans = ans * 26 + num;
        }
        return ans;
    }
}